/**
 * 十字爆破
 *
 * 题目描述
 * 牛牛在玩一个游戏：
 * 一共有n行m列共n*m个方格，每个方格中有一个整数。
 * 牛牛选择一个方格，可以得到和这个方格同行、同列的所有数之和的得分。
 *
 * 例如：对于一个2*2的方格：
 * 1 2
 * 3 4
 * 牛牛选择每个方格的得分如下：
 * 6 7
 * 8 9
 * 因为 1+2+3=6，1+2+4=7，1+3+4=8，2+3+4=9。
 * 现在牛牛想知道下一步选择每个格子的得分情况，你可以帮帮他吗？
 *
 * 输入描述:
 * 第一行有两个正整数
 * n 和 m  代表方格的行数和列数。(1≤n∗m≤1000000)
 * 接下来的 n  行，每行有 m 个数 aij 代表每个方格中的整数。(−10^9≤aij≤10^9)
 *
 * 输出描述:
 * 输出
 * n 行 m 列整数，分别代表选择每个位置方格的得分情况。
 */

import java.io.*;
import java.util.StringTokenizer;

/**
 * 我们只要多赖皮一个位置, 用来存储行和列则总和就可以了,
 * 最后的结果就是行和列的总和 相加减去这个位置的值, 就是
 * 这个位置的十字爆破
 * 时间复杂度 : O(n ^ 2)
 * 空间负载的 : O(n ^ 2)
 */

public class Main {

    public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static Read in = new Read();

    public static void main(String[] args) throws IOException {
        // 写代码
        int n = in.nextInt(), m = in.nextInt();

        // 多开辟一个位置, 用来存储行和列的总和
        int[][] nums = new int[n + 1][m + 1];
        for (int i = 0; i < n; i++) {

            // 求每行的总和
            int x = 0;
            for (int j = 0; j < m; j++) {
                nums[i][j] = in.nextInt();
                x += nums[i][j];
            }
            nums[i][m] = x;
        }

        for (int j = 0; j < m; j++) {

            // 求每列的总和
            int x = 0;
            for (int i = 0; i < n; i++) {
                x += nums[i][j];
            }
            nums[n][j] = x;
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {

                // 求每个位置的值
                int x = nums[i][m] + nums[n][j] - nums[i][j];
                System.out.print(x + " ");
            }
            System.out.println();
        }

        out.close();
    }
}

// 自定义快速读入
class Read {
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String next() throws IOException {
        while(!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    String nextLine() throws IOException {
        return bf.readLine();
    }

    int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }
}